import Vue from 'vue'
import axios from 'axios'
import store from '@/store'
import router from '@/router'
import list from '@/config/permitPathConfig'


const http = axios.create({
    //统一请求URL地址
    baseURL: process.env.VUE_APP_BASE_API,
    //超时时间
    timeout: 1000 * 60
})

//请求拦截器
http.interceptors.request.use(
    config =>{
        //放行白名单
        for (let i in list){
            if(config.url.indexOf(list[i]) == 0){
                return config;
            }
        }
        //获取缓存的用户信息
        let token = store.getters['user/GET_TOKEN'];
        if(token){
            config.headers.Authorization = `Bearer ${token}`;
            return config;
        }else{
            router.push({path:'/login'})
        }
    },
    error =>{
        return Promise.reject(error);
    }
)

//响应拦截器
http.interceptors.response.use(
    success =>{
        // console.log(success.header['content-disposition'],split(';')[1].split('filename='[1]))
        if(success.data.data){
            return success.data.data;
        }else{
            return success.data;
        }
    },
    error =>{
        if(error.code === 'ERR_NETWORK'){
            return Promise.reject(error);
        }else{
            const status = error.response.status;
            switch(status){
                case 401:
                    router.push('/login');
                    break;
                case 404:
                    return Promise.reject("请求资源不存在!");
            }
            if(error.response.data.msg){
                return Promise.reject(error.response.data.msg);
            }else if(error.response.data.message){
                return Promise.reject(error.response.data.message);
            }else{
                return Promise.reject(error.message);
            }       
        }
    }
)

/**
 * requestUrl = 请求的地址
 * requestType = 请求的类型
 * requestData = 请求的参数
 */
export default (requestUrl, requestType, requestData) => {
    return http({
        //请求的地址
        url: requestUrl,
        //请求的类型
        method: requestType,
        //请求的参数:如果是get请求就使用[params]作为属性,如果是post请求就使用[data]作为属性
        [requestType.toLowerCase() === 'get' ? 'params' : 'data']: requestData
    })
}

/**
 * 全局Vue组件中使用
 */
Vue.prototype.$http = http;